声明:博主写了一些Ambari系列文章,可以在历史文章中查看。

一、概述

  1. 如果要开发ambari API的话,我们需要在ambari-server的文件里面添加相关java代码。

  2. 然后整体编译ambari,可以不编译ambari-metrics系列。

  3. 编译成功后,yum remove ambari-server

  4. yum install ambari-server-*.rpm

  5. ambari-server setup

  6. vim /etc/ambari-server/conf/ambari.properties

  7. server.jdbc.driver.path=/usr/share/java/mysql-jdbc.driver.jar

    mysql-jdbc.driver.jar下载地址 将jar包放入/usr/share/java/目录下

  8. ambari-server setup –jdbc-db=mysql –jdbc-driver=/usr/share/java/mysql-jdbc.driver.jar

  9. ambari-server start

  10. 访问ambari页面

二、详细开发指南

  1. 首先在\ambari-server\src\main\java\org\apache\ambari\server\controller\AmbariServer内添加自定义的java所在的包路径,需要把新写的类发不成服务。 图片
  2. 如果你编译成功过一次之后,。本机的maven库里会存下来这些jar包,你就可以直接编译单个server了 (待测)
  3. 上代码实例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package com.sugon.sdh.api.services;


import javax.ws.rs.POST;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.PathParam;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.sf.json.JSONObject;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

import java.io.IOException;

/**
* Copy of guice persist module for local modifications
*/
@Path("/yarnInfo")
public class yarnService {
@GET
@Path("/show/{ip}")
@Produces("application/json")
public Map<String, String> testYarn(@PathParam("ip") String ip) {
Map<String, String> map = new HashMap<String, String>();
map.put("status", "OK");
map.put("address", "http://"+ip+":8088/ws/v1/cluster/apps");
return map;
}

@GET
@Path("/yarn/{ip}")
@Produces("application/json")
public Map<String, Object> yarn(@PathParam("ip") String ip) throws IOException {
Map<String, Object> map = new HashMap<String, Object>();
String info = "{}"; //用于接收API信息
CloseableHttpClient httpclient = HttpClients.createDefault();
//将url放入
HttpGet httpGet = new HttpGet("http://"+ip+":8088/ws/v1/cluster/apps");
CloseableHttpResponse response = httpclient.execute(httpGet);
HttpEntity entity = response.getEntity();
info = EntityUtils.toString(entity);
JSONObject json = JSONObject.fromObject(info);
map.put("info", json);
//System.out.println(json);

//最后释放资源
response.close();
return map;
}
}
# 说明:
带参的方法:@PathParam("ip") String ip
返回的数据什么类型:@Produces("application/json")
请求的方式:@GET@POST
  1. 这样等编译成功,并且ambari安装成功后,就可以访问自制API:ip:8080/api/v1/yarnInfo/show/参数
  2. 需要的jar包,可以在ambari-server的根目录下的pom.xml文件内添加中央仓库位置,整体编译的时候会自动下载。

问题1:加入是自定义的jar包,ambari-server要引用这个jar包内的类,需要把jar包放在哪个位置?